package com.lxw.question;

import java.util.*;

public class Q16 {
    /**
     * 题目描述
     * 输入两个整数序列，第一个序列表示栈的压入顺序，请判断第二个序列是否为该栈的弹出顺序。
     * 假设压入栈的所有数字均不相等。例如，序列 {1,2,3,4,5} 是某栈的压栈序列，
     * 序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列，但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。
     * 链接：https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof
     */

    public static boolean validateStackSequences(int[] pushed, int[] popped) {

        Deque<Integer> pushedStack = new LinkedList<>();
        int j = 0;
        for(int i : pushed){
            pushedStack.addFirst(i);
            while(  j < popped.length && !pushedStack.isEmpty() && popped[j] == pushedStack.peek()){
                pushedStack.removeFirst();
                j++;
            }
        }
        return j == popped.length;
    }

    public static void main(String[] args){
        int[] pushed = {1,2,3,4,5};
        int[] popped = {4,5,3,2,1};
        boolean b = validateStackSequences(pushed, popped);
        System.out.println(b);

    }
}
